Micron Document
██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝


🬧 The NomadNet Encyclopedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Mutex
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
In mwbqinformatica un mwbgmutex (contrazione dell'mwbwinglese mwcamwcqmutual mwcgexclusion, mwcwlett. "mutua esclusione") è un mwdaoggetto virtuale utilizzato per implementare l'omonimo meccanismo di mwdqsincronizzazione tra processi che mwdgconcorrono per l'utilizzo di una mwdwrisorsa condivisa.

Questo concetto riveste importanza fondamentale nella mweqprogrammazione parallela e soprattutto nei mwegsistemi transazionali.

Contents


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Descrizione

Per realizzare l'esclusione mutua si assegna a un mwfgoggetto o porzione di mwfwprogramma (mwgasezione critica) un elemento che va sempre controllato prima che un altro processo o thread possa eseguire istruzioni sull'oggetto stesso. Se un processo o thread sta già accedendo all'oggetto, tutti gli altri devono aspettare che il primo finisca. Gli oggetti mutex utilizzati per coordinare processi diversi devono essere di per sé accessibili a tutti i processi coinvolti, il che implica necessariamente l'uso di memoria condivisa, oppure gestita direttamente dal mwgqsistema operativo.

Per realizzare ciò, la procedura di utilizzo di una mwgwrisorsa critica deve essere strutturata nelle seguenti fasi:

1. Richiesta
2. Sezione Critica
3. Rilascio

All'avvio, mediante la fase di richiesta, il mwiqprocesso verifica se un altro processo sta utilizzando la mwigsezione critica. Al termine, mediante la fase di rilascio, il processo segnala che la risorsa critica utilizzata è libera e dunque utilizzabile da un altro processo.

Affinché sia possibile la mutua esclusione occorrono sei condizioni:

1. un solo mwjgProcesso o mwjwThread accede alla sezione critica;
2. nessun processo può bloccarsi in sezione critica;
3. non ci sono mwkgdeadlock (stallo) e mwkwstarvation;
4. non viene fatta nessuna assunzione sulla velocità dei processi;
5. nessun processo fuori dalla sezione critica può impedire a un altro di entrare;
6. l'accesso alla sezione critica è consentito in un tempo definito.

Implementazioni

L'mwmqimplementazione più comune dei mutex fa uso di mwmgmonitor, ma lo stesso risultato si può ottenere anche per mezzo di semplici mwmwlock o mwnasemafori; un mutex può essere visto come caso particolare di semaforo inizializzato a uno. Spesso è possibile migliorare la tecnica di accesso con l'ausilio di lock read/write che consentono un numero illimitato di accessi in lettura e uno solo in scrittura. Questa tecnica è impiegata soprattutto per regolare l'accesso ai mwnqfile e alle mwngbanche dati.

Per implementare un mutex in maniera efficiente è necessario che il sistema operativo offra uno mwoascheduler adatto. Senza questa predisposizione, e in particolare su molti mwoqsistemi operativi real-time, bisogna ricorrere a mwogspinlock che purtroppo riducono l'efficienza del mwowmultitasking poiché utilizzano il mwpaprocessore durante le attese.

Supporto

Alcuni mwpwlinguaggi di programmazione offrono la tecnica mutex come parte del linguaggio stesso, in particolare mwqaRust, mwqqAda, mwqgJava e i mwqwlinguaggi di programmazione .NET. Per quasi tutti gli altri linguaggi esistono mwralibrerie che implementano il sistema mutex. Questo può essere integrato come parte dell'mwrqAPI o dell'mwrgambiente mwrwruntime.

Problemi

L'esclusione reciproca comporta il rischio di mwsgdeadlock, situazione in cui più task si bloccano vicendevolmente e nessuno può più proseguire (mwswstarvation). Il mwtaproblema dei filosofi a cena è un esempio di questa circostanza. Esistono mwtqalgoritmi speciali per aggirare questo inconveniente (mwtgalgoritmo di Peterson, mwtwalgoritmo di Dekker) che si può facilmente evitare ponendo cura alla programmazione.

Voci correlate
Collegamenti esterni

• citereffoldoc(EN) Denis Howe, mutual exclusion, in Free On-line Dictionary of Computing. Disponibile con licenza mwwqGFDL
• mwwwMutua Esclusione Distribuita (mwxasito dell'mwxquniversità di Genova)